// 创建用户集合
const mongoose = require('mongoose');
//引入验证模块joi
const Joi = require('joi');
require('./connect')
//创建用户集合规则
const userSchema = new mongoose.Schema({
    username: {
        type: String,
        minlength: 2,
        maxlength: 12,
        required: true
    },
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    // amdin 超级管理员
    // normal 普通用户
    // teacher 老师
    role: {
        type: String,
        required: true
    },
    //默认 0 启用
    //    1 禁用
    state: {
        type: Number,
        default: 0
    },
    selected: {
        type: Boolean,
        default: false
    },
    // titles: {
    //     type: [String],
    // },
    // 学生题目1
    title1: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Article',
        default: null
    },
    selectTime: {
        type: Date,
        default: null
    },
    // 用户头像
    avator: {
        type: String,
        default: '/public/images/akari.jpg'
    }
});

//创建集合
mongoose.set('useCreateIndex', true);
const User = mongoose.model('User', userSchema);

//测试创建文档, 对数据库增删改查在路由模块中进行
// User.create({
//         username: 'bbf',
//         email: 'dg70946@163.com',
//         password: '123',
//         role: 'admin',
//         state: 0
//     }).then(() => console.log('文档创建成功'))
//     .catch(() => console.log('文档创建失败'));

//用户信息验证,user-edit-fn里用到
const validateUser = user => {
    // 创建验证规则
    const schema = {
        username: Joi.string().min(2).max(10).required().error(new Error('用户名不符合要求')),
        email: Joi.string().email().required().error(new Error('邮箱地址格式错误')),
        password: Joi.string().regex(/^[a-zA-Z0-9]{3,20}$/).required().error(new Error('密码不符合要求')),
        role: Joi.string().valid('normal', 'admin', 'teacher').required().error(new Error('角色值非法')),
        state: Joi.number().valid(0, 1).required().error(new Error('状态值非法'))
    }
    //实施验证
    return Joi.validate(user, schema);
}

//将用户集合作为模块成员导出，因为以后可能要导出多个模块，所以用对象
module.exports = {
    // User : User  ES6属性和属性值相等的话 可以直接写User
    User,
    validateUser
}